/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
using System.Collections.Generic;

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Transform;
using Aliyun.Acs.Core.Utils;
using Aliyun.Acs.Smartag.Transform;
using Aliyun.Acs.Smartag.Transform.V20180313;

namespace Aliyun.Acs.Smartag.Model.V20180313
{
    public class DescribeSmartAccessGatewaysRequest : RpcAcsRequest<DescribeSmartAccessGatewaysResponse>
    {
        public DescribeSmartAccessGatewaysRequest()
            : base("Smartag", "2018-03-13", "DescribeSmartAccessGateways", "smartag", "openAPI")
        {
            if (this.GetType().GetProperty("ProductEndpointMap") != null && this.GetType().GetProperty("ProductEndpointType") != null)
            {
                this.GetType().GetProperty("ProductEndpointMap").SetValue(this, Endpoint.endpointMap, null);
                this.GetType().GetProperty("ProductEndpointType").SetValue(this, Endpoint.endpointRegionalType, null);
            }
        }

		private long? resourceOwnerId;

		private string aclIds;

		private bool? canAssociateQos;

		private string softwareVersion;

		private string unboundAclIds;

		private int? pageNumber;

		private string versionComparator;

		private string resourceGroupId;

		private int? pageSize;

		private string instanceType;

		private string hardwareType;

		private string serialNumber;

		private string resourceOwnerAccount;

		private string ownerAccount;

		private string associatedCcnId;

		private long? ownerId;

		private string businessState;

		private string name;

		private string smartAGId;

		private string status;

		public long? ResourceOwnerId
		{
			get
			{
				return resourceOwnerId;
			}
			set	
			{
				resourceOwnerId = value;
				DictionaryUtil.Add(QueryParameters, "ResourceOwnerId", value.ToString());
			}
		}

		public string AclIds
		{
			get
			{
				return aclIds;
			}
			set	
			{
				aclIds = value;
				DictionaryUtil.Add(QueryParameters, "AclIds", value);
			}
		}

		public bool? CanAssociateQos
		{
			get
			{
				return canAssociateQos;
			}
			set	
			{
				canAssociateQos = value;
				DictionaryUtil.Add(QueryParameters, "CanAssociateQos", value.ToString());
			}
		}

		public string SoftwareVersion
		{
			get
			{
				return softwareVersion;
			}
			set	
			{
				softwareVersion = value;
				DictionaryUtil.Add(QueryParameters, "SoftwareVersion", value);
			}
		}

		public string UnboundAclIds
		{
			get
			{
				return unboundAclIds;
			}
			set	
			{
				unboundAclIds = value;
				DictionaryUtil.Add(QueryParameters, "UnboundAclIds", value);
			}
		}

		public int? PageNumber
		{
			get
			{
				return pageNumber;
			}
			set	
			{
				pageNumber = value;
				DictionaryUtil.Add(QueryParameters, "PageNumber", value.ToString());
			}
		}

		public string VersionComparator
		{
			get
			{
				return versionComparator;
			}
			set	
			{
				versionComparator = value;
				DictionaryUtil.Add(QueryParameters, "VersionComparator", value);
			}
		}

		public string ResourceGroupId
		{
			get
			{
				return resourceGroupId;
			}
			set	
			{
				resourceGroupId = value;
				DictionaryUtil.Add(QueryParameters, "ResourceGroupId", value);
			}
		}

		public int? PageSize
		{
			get
			{
				return pageSize;
			}
			set	
			{
				pageSize = value;
				DictionaryUtil.Add(QueryParameters, "PageSize", value.ToString());
			}
		}

		public string InstanceType
		{
			get
			{
				return instanceType;
			}
			set	
			{
				instanceType = value;
				DictionaryUtil.Add(QueryParameters, "InstanceType", value);
			}
		}

		public string HardwareType
		{
			get
			{
				return hardwareType;
			}
			set	
			{
				hardwareType = value;
				DictionaryUtil.Add(QueryParameters, "HardwareType", value);
			}
		}

		public string SerialNumber
		{
			get
			{
				return serialNumber;
			}
			set	
			{
				serialNumber = value;
				DictionaryUtil.Add(QueryParameters, "SerialNumber", value);
			}
		}

		public string ResourceOwnerAccount
		{
			get
			{
				return resourceOwnerAccount;
			}
			set	
			{
				resourceOwnerAccount = value;
				DictionaryUtil.Add(QueryParameters, "ResourceOwnerAccount", value);
			}
		}

		public string OwnerAccount
		{
			get
			{
				return ownerAccount;
			}
			set	
			{
				ownerAccount = value;
				DictionaryUtil.Add(QueryParameters, "OwnerAccount", value);
			}
		}

		public string AssociatedCcnId
		{
			get
			{
				return associatedCcnId;
			}
			set	
			{
				associatedCcnId = value;
				DictionaryUtil.Add(QueryParameters, "AssociatedCcnId", value);
			}
		}

		public long? OwnerId
		{
			get
			{
				return ownerId;
			}
			set	
			{
				ownerId = value;
				DictionaryUtil.Add(QueryParameters, "OwnerId", value.ToString());
			}
		}

		public string BusinessState
		{
			get
			{
				return businessState;
			}
			set	
			{
				businessState = value;
				DictionaryUtil.Add(QueryParameters, "BusinessState", value);
			}
		}

		public string Name
		{
			get
			{
				return name;
			}
			set	
			{
				name = value;
				DictionaryUtil.Add(QueryParameters, "Name", value);
			}
		}

		public string SmartAGId
		{
			get
			{
				return smartAGId;
			}
			set	
			{
				smartAGId = value;
				DictionaryUtil.Add(QueryParameters, "SmartAGId", value);
			}
		}

		public string Status
		{
			get
			{
				return status;
			}
			set	
			{
				status = value;
				DictionaryUtil.Add(QueryParameters, "Status", value);
			}
		}

        public override DescribeSmartAccessGatewaysResponse GetResponse(UnmarshallerContext unmarshallerContext)
        {
            return DescribeSmartAccessGatewaysResponseUnmarshaller.Unmarshall(unmarshallerContext);
        }
    }
}
